package cn.elwy.rcp.ui.explorer.core.service.impl;

import java.io.File;
import java.io.InputStream;
import java.net.URL;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.elwy.common.util.PathUtil;
import cn.elwy.osgi.config.ConfigContext;
import cn.elwy.osgi.config.ConfigPath;
import cn.elwy.osgi.config.util.ResourceUtil;
import cn.elwy.rcp.ui.explorer.core.PathConst;
import cn.elwy.rcp.ui.explorer.core.dao.ProjectConfigDao;
import cn.elwy.rcp.ui.explorer.core.service.ProjectConfigService;
import cn.elwy.rcp.ui.explorer.core.vo.ProjectConfig;

@Service(ProjectConfigService.ID)
public class ProjectConfigServiceImpl implements ProjectConfigService {

	@Resource
	private ProjectConfigDao projectConfigDao;

	public ProjectConfigDao getProjectConfigDao() {
		return projectConfigDao;
	}

	public void setProjectConfigDao(ProjectConfigDao projectConfigDao) {
		this.projectConfigDao = projectConfigDao;
	}

	/**
	 * 加载工程配置文件
	 * @param projectPath 配置文件路径
	 * @return
	 */
	public ProjectConfig load() {
		URL url = ResourceUtil.getResource(this.getClass(), PathConst.PROJECT_TEMPLATE_FILE);
		return load(url);
	}

	/**
	 * 加载工程配置文件
	 * @param projectPath 配置文件路径
	 * @return
	 */
	public ProjectConfig load(File file) {
		return getProjectConfigDao().load(file);
	}

	/**
	 * 加载工程配置文件
	 * @param file 配置文件路径
	 * @return
	 */
	public ProjectConfig load(URL url) {
		return getProjectConfigDao().load(url);
	}

	/**
	 * 加载工程配置文件
	 * @param file 配置文件路径
	 * @return
	 */
	public ProjectConfig load(InputStream in, String encoding) {
		return projectConfigDao.load(in, encoding);
	}

	@Override
	public ProjectConfig getNewPorject() {
		if (ConfigContext.isUsedLastNewProject()) {
			File file = getLastProjectPath();
			if (file.exists()) {
				return getProjectConfigDao().load(file);
			}
			file = PathUtil.getResourcesFile(this.getClass(), PathConst.PROJECT_TEMPLATE_FILE);
			if (file.exists()) {
				return getProjectConfigDao().load(file);
			}
		}
		return getProjectConfigDao().getEmptyPorject();
	}

	public void saveLastProject(ProjectConfig projectConfig) {
		if (ConfigContext.isUsedLastNewProject()) {
			File file = getLastProjectPath();
			projectConfigDao.save(projectConfig, file);
		}
	}

	public void save(File file, ProjectConfig projectConfig) {
		projectConfigDao.save(projectConfig, file);
	}

	private File getLastProjectPath() {
		Object subjectId = ConfigPath.getSubjectId(true);
		return ConfigPath.getFile("", subjectId, "last_project", ConfigContext.PROJECT_EXT_NAME);
	}
}
